Authentication এবং Authorization হল ASP.Net অ্যাপ্লিকেশনের নিরাপত্তার দুটি গুরুত্বপূর্ণ দিক। এই দুটি প্রক্রিয়া নির্ধারণ করে কোন ব্যবহারকারী অ্যাপ্লিকেশন অ্যাক্সেস করতে পারে এবং তাদের কী কী অনুমতি (permissions) থাকতে পারে। এই টিউটোরিয়ালে, Authentication এবং Authorization এর মধ্যে পার্থক্য এবং ASP.Net এ তাদের কিভাবে প্রয়োগ করা হয় তা আলোচনা করা হবে।
Authentication হল একটি প্রক্রিয়া যা নিশ্চিত করে যে একটি ব্যবহারকারী আসলেই সে যে দাবি করছে তা। এটি ব্যবহারকারীর পরিচয় যাচাই করার প্রক্রিয়া। যখন একটি ব্যবহারকারী অ্যাপ্লিকেশনে লগইন করে, তখন তার Username এবং Password বা অন্যান্য পরিচয়পত্রের মাধ্যমে তার পরিচয় যাচাই করা হয়।
UseCookiesAuthentication
middleware ব্যবহার করে এটি সেটআপ করা যায়।ASP.Net Core অ্যাপ্লিকেশনে Authentication কনফিগার করতে, আপনাকে Startup.cs ফাইলে ConfigureServices
এবং Configure
মেথডে কনফিগারেশন যোগ করতে হবে।
public void ConfigureServices(IServiceCollection services)
{
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie(options =>
{
options.LoginPath = "/Account/Login"; // লগইন পেজের পথ নির্ধারণ
});
services.AddMvc();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseAuthentication(); // Authentication middleware যোগ করা
app.UseMvc();
}
এখানে CookieAuthentication ব্যবহার করা হয়েছে, যা লগইন পরবর্তী সময় ব্যবহারকারীকে cookie প্রদান করবে।
Authorization হল একটি প্রক্রিয়া যা নির্ধারণ করে যে কোনো প্রমাণীকৃত (authenticated) ব্যবহারকারী কোন রিসোর্স অ্যাক্সেস করতে পারবে বা পারবে না। অর্থাৎ, একটি ব্যবহারকারী যদি সফলভাবে লগইন করে, তবে তাকে অনুমতি দেওয়া হয় কিনা তার উপর ভিত্তি করে। এটি সাধারণত বিভিন্ন রোল বা পলিসির মাধ্যমে পরিচালিত হয়।
ASP.Net Core অ্যাপ্লিকেশনে Authorization কনফিগার করতে Startup.cs ফাইলে ConfigureServices
এবং Configure
মেথডে কনফিগারেশন যোগ করতে হয়।
public void ConfigureServices(IServiceCollection services)
{
services.AddAuthorization(options =>
{
options.AddPolicy("AdminOnly", policy => policy.RequireRole("Admin"));
});
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie(options => { options.LoginPath = "/Account/Login"; });
services.AddMvc();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseAuthentication();
app.UseMvc();
}
এখানে "AdminOnly" পলিসি তৈরি করা হয়েছে, যেখানে শুধুমাত্র Admin রোলের ব্যবহারকারী অ্যাক্সেস পাবে।
[Authorize(Roles = "Admin")]
public IActionResult AdminDashboard()
{
return View();
}
এই অ্যাট্রিবিউট ব্যবহার করে আপনি কন্ট্রোলারের কোনো নির্দিষ্ট অ্যাকশন বা সম্পূর্ণ কন্ট্রোলার রোল ভিত্তিক অথোরাইজেশন চেক করতে পারেন।
public void ConfigureServices(IServiceCollection services)
{
services.AddAuthorization(options =>
{
options.AddPolicy("AgeRequirement", policy => policy.Requirements.Add(new MinimumAgeRequirement(18)));
});
}
public void Configure(IApplicationBuilder app)
{
app.UseAuthentication();
app.UseMvc();
}
এখানে, AgeRequirement পলিসি অনুযায়ী শুধুমাত্র ১৮ বছর বা তার বেশি বয়সের ব্যবহারকারী অ্যাক্সেস পাবে।
Feature | Authentication | Authorization |
---|---|---|
Definition | যাচাই করা, ব্যবহারকারী আসলেই কে তা নিশ্চিত করা। | নির্ধারণ করা, ব্যবহারকারী কী করতে পারবে তা ঠিক করা। |
Focus | ব্যবহারকারীর পরিচয় যাচাই করা। | ব্যবহারকারীকে বিভিন্ন রিসোর্সের উপর কী কী অ্যাক্সেস দেওয়া হবে তা নির্ধারণ করা। |
Mechanism | ইউজারের লগইন তথ্য (যেমন: ইউজারনেম, পাসওয়ার্ড)। | রোল বা পলিসি দ্বারা নির্ধারণ। |
Example | ইউজারের নাম এবং পাসওয়ার্ড যাচাই। | ইউজার অ্যাডমিন রোলের হলে অ্যাডমিন পেজ অ্যাক্সেস দেওয়া। |
Authentication এবং Authorization ASP.Net অ্যাপ্লিকেশনের নিরাপত্তা ব্যবস্থার দুইটি গুরুত্বপূর্ণ অংশ। Authentication ব্যবহারকারীকে সনাক্ত করে, আর Authorization নির্ধারণ করে ব্যবহারকারীকে কী অ্যাক্সেস দেওয়া হবে। ASP.Net Core এবং ASP.Net MVC এ এই প্রক্রিয়াগুলোকে সহজে কনফিগার করা যায়, যাতে প্রতিটি ব্যবহারকারীর জন্য নিরাপদ এবং কাস্টমাইজড এক্সেস কন্ট্রোল প্রদান করা সম্ভব হয়।
ASP.Net Identity Framework হলো একটি আধুনিক এবং শক্তিশালী সিকিউরিটি ফ্রেমওয়ার্ক, যা ASP.Net এবং ASP.Net Core অ্যাপ্লিকেশনগুলোর জন্য ইউজার অথেন্টিকেশন এবং অথোরাইজেশন পরিচালনা করতে ব্যবহৃত হয়। এটি ইউজারদের রেজিস্ট্রেশন, লগইন, পাসওয়ার্ড ম্যানেজমেন্ট, রোল এবং পারমিশন কন্ট্রোল, টোকেন বেসড অথেন্টিকেশন, এবং অন্যান্য নিরাপত্তা সম্পর্কিত কার্যাবলী সমর্থন করে।
ASP.Net Identity ফ্রেমওয়ার্ক প্রাথমিকভাবে ইউজার-ভিত্তিক অথেন্টিকেশন ও অথোরাইজেশন ব্যবস্থা তৈরি করার জন্য ডিজাইন করা হয়েছে এবং এটি একাধিক অথেন্টিকেশন মেকানিজমের মাধ্যমে ইউজারের সিকিউরিটি নিশ্চিত করে।
ASP.Net Identity ফ্রেমওয়ার্কে কিছু গুরুত্বপূর্ণ বৈশিষ্ট্য রয়েছে, যা ডেভেলপারদের ইউজার ম্যানেজমেন্ট এবং সিকিউরিটি ফিচারগুলিকে সহজ করে তোলে। এই বৈশিষ্ট্যগুলো অন্তর্ভুক্ত:
ASP.Net Identity ফ্রেমওয়ার্ক ইনস্টল করা এবং কনফিগার করা বেশ সোজা। আপনি যদি ASP.Net Core ব্যবহার করছেন, তবে নিম্নলিখিত পদক্ষেপগুলো অনুসরণ করতে হবে:
NuGet প্যাকেজ ইনস্টল করা
ASP.Net Identity ফ্রেমওয়ার্ক ব্যবহার করতে NuGet প্যাকেজের মাধ্যমে Microsoft.AspNetCore.Identity ইনস্টল করতে হবে।
Package Manager Console ব্যবহার করে:
Install-Package Microsoft.AspNetCore.Identity.EntityFrameworkCore
অথবা .NET CLI ব্যবহার করে:
dotnet add package Microsoft.AspNetCore.Identity.EntityFrameworkCore
DbContext কনফিগারেশন
ASP.Net Identity একটি DbContext
ক্লাসের মাধ্যমে ইউজার এবং রোল ডেটা সংরক্ষণ করে। এটি সাধারণত ApplicationDbContext হিসেবে পরিচিত থাকে। এই DbContext ক্লাসটি IdentityDbContext থেকে ইনহেরিট করে।
উদাহরণ:
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
: base(options)
{
}
}
এখানে, ApplicationUser হলো একটি কাস্টম ইউজার ক্লাস যা IdentityUser থেকে ইনহেরিট করে, যেখানে ইউজারের জন্য অতিরিক্ত প্রপার্টি যোগ করা যেতে পারে।
স্টার্টআপ কনফিগারেশন
Startup.cs
ফাইলে Identity সেবা কনফিগার করতে হবে:
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
services.AddIdentity<ApplicationUser, IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
}
এখানে, AddIdentity<ApplicationUser, IdentityRole>
Identity সার্ভিস কনফিগার করে এবং AddEntityFrameworkStores<ApplicationDbContext>
ডেটাবেস সংযোগ স্থাপন করে।
ASP.Net Identity ফ্রেমওয়ার্কের মাধ্যমে ইউজার লগইন এবং রেজিস্ট্রেশন সিস্টেম তৈরি করতে নিম্নলিখিত প্রক্রিয়া অনুসরণ করতে হবে:
ইউজার রেজিস্ট্রেশন ইউজার রেজিস্ট্রেশন প্রক্রিয়াটি সাধারণত একটি ফর্মের মাধ্যমে শুরু হয়, যেখানে ইউজার তার নাম, ইমেইল, পাসওয়ার্ড ইত্যাদি প্রদান করে। UserManager
ব্যবহার করে রেজিস্ট্রেশন সম্পন্ন করা হয়।
উদাহরণ:
var user = new ApplicationUser { UserName = model.Email, Email = model.Email };
var result = await _userManager.CreateAsync(user, model.Password);
ইউজার লগইন ইউজার লগইন প্রক্রিয়া পরিচালনার জন্য SignInManager ব্যবহার করা হয়।
উদাহরণ:
var result = await _signInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, false);
ASP.Net Identity ফ্রেমওয়ার্ক একটি শক্তিশালী অথেন্টিকেশন এবং অথোরাইজেশন সিস্টেম যা ASP.Net এবং ASP.Net Core অ্যাপ্লিকেশনে নিরাপত্তা পরিচালনা করতে সাহায্য করে। এটি ইউজারের রেজিস্ট্রেশন, লগইন, পাসওয়ার্ড রিসেট, রোল ম্যানেজমেন্ট, এবং সোশ্যাল অথেন্টিকেশন সমর্থন করে। Identity ফ্রেমওয়ার্ক ASP.Net অ্যাপ্লিকেশনগুলির জন্য একটি উন্নত সিকিউরিটি সিস্টেম নিশ্চিত করে, যা ইউজার ডেটা সুরক্ষিত রাখতে সাহায্য করে।
Authentication এবং Authorization দুটি গুরুত্বপূর্ণ সিকিউরিটি কনসেপ্ট যা অ্যাপ্লিকেশনে ইউজারের সুরক্ষা নিশ্চিত করতে ব্যবহৃত হয়। যদিও অনেক সময় এগুলোকে একসাথে ব্যবহার করা হয়, তবে এগুলির মধ্যে স্পষ্ট পার্থক্য রয়েছে।
Authentication হলো একটি প্রক্রিয়া যার মাধ্যমে সিস্টেম বা অ্যাপ্লিকেশন নিশ্চিত করে যে, ইউজারটি কে। এটি মূলত ইউজারের পরিচয় যাচাই করার প্রক্রিয়া। Authentication সফল হলে, অ্যাপ্লিকেশন জানবে ইউজারটি প্রকৃতপক্ষে সেই ব্যক্তি কি না।
ধরা যাক, একজন ইউজার username এবং password দিয়ে লগইন করছে। অ্যাপ্লিকেশনটি ইউজারের প্রমাণীকরণ করবে এবং এটি জানাবে যে, ইউজারটি আসলে যে ব্যক্তি দাবি করছে।
if (User.Identity.IsAuthenticated)
{
// ইউজার সঠিকভাবে প্রমাণিত
return View();
}
else
{
// ইউজার সঠিকভাবে প্রমাণিত নয়
return RedirectToAction("Login");
}
এখানে User.Identity.IsAuthenticated যাচাই করছে যে, ইউজারটি প্রমাণিত কি না।
Authorization হলো একটি প্রক্রিয়া যার মাধ্যমে অ্যাপ্লিকেশন বা সিস্টেম নির্ধারণ করে যে, প্রমাণিত ইউজারটি কী কী কাজ বা অ্যাক্সেস করতে পারবে। এটি ইউজারের এক্সেস রাইটস বা অনুমতিগুলো নিয়ন্ত্রণ করে, যেমন কোন ফিচার বা ডেটাতে তাদের অ্যাক্সেস থাকবে।
ধরা যাক, একটি অ্যাপ্লিকেশনে Admin রোলের ইউজারকে বিশেষ কিছু অ্যাক্সেস দেওয়া হয়।
[Authorize(Roles = "Admin")]
public IActionResult AdminDashboard()
{
return View();
}
এখানে, শুধুমাত্র Admin রোলের ইউজাররা AdminDashboard অ্যাক্সেস করতে পারবে।
বিষয় | Authentication | Authorization |
---|---|---|
সংজ্ঞা | ইউজারের পরিচয় যাচাই করা | ইউজারের কাজ বা অ্যাক্সেস অনুমোদন করা |
কাজ | ইউজারের identity যাচাই করে, তাকে প্রমাণিত করে | ইউজারের নির্দিষ্ট কাজ বা রিসোর্সে অ্যাক্সেস অনুমোদন |
প্রক্রিয়া | ইউজারের username এবং password যাচাই | ইউজারের role বা claim এর ভিত্তিতে অনুমোদন |
উদাহরণ | ইউজার লগইন করতে পারে কিনা তা যাচাই করা | ইউজার কোন পৃষ্ঠায় অ্যাক্সেস পাবে কিনা তা নির্ধারণ করা |
উদাহরণ প্রযুক্তি | Cookies, JWT, OAuth, Basic Authentication | Role-based Authorization, Claims-based Authorization, Policy-based Authorization |
ASP.Net MVC এবং ASP.Net Core এ Authentication এবং Authorization ব্যবহারের জন্য কয়েকটি সাধারণ পদ্ধতি রয়েছে:
ASP.Net Core এ Authentication এবং Authorization পরিচালনা করার জন্য ASP.Net Core Identity বা JWT Bearer Tokens ব্যবহৃত হয়।
public void ConfigureServices(IServiceCollection services)
{
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie(options => {
options.LoginPath = "/Account/Login";
});
services.AddAuthorization(options => {
options.AddPolicy("AdminPolicy", policy => policy.RequireRole("Admin"));
});
}
ASP.Net MVC তে [Authorize] অ্যাট্রিবিউট ব্যবহার করে Authorization পরিচালনা করা হয়।
[Authorize(Roles = "Admin")]
public ActionResult AdminOnlyPage()
{
return View();
}
সারাংশ:
ASP.Net অ্যাপ্লিকেশনগুলোতে Authorization একটি গুরুত্বপূর্ণ নিরাপত্তা ব্যবস্থা, যা ব্যবহারকারীর অ্যাক্সেসের অনুমতি নির্ধারণ করে। Role-based এবং Claim-based Authorization হল দুটি প্রধান পদ্ধতি, যা ASP.Net অ্যাপ্লিকেশনগুলোতে ইউজারদের অনুমতি ব্যবস্থাপনা করতে ব্যবহৃত হয়। এখানে, এই দুটি Authorization পদ্ধতি বিস্তারিতভাবে ব্যাখ্যা করা হলো।
Role-based Authorization ব্যবহার করে আপনি ব্যবহারকারীদের নির্দিষ্ট roles এর ভিত্তিতে অ্যাপ্লিকেশনের বিভিন্ন অংশে অ্যাক্সেস প্রদান করতে পারেন। একটি রোল হলো একটি গ্রুপ বা ক্যাটাগরি, যার মধ্যে এক বা একাধিক ব্যবহারকারী থাকতে পারে। একটি ব্যবহারকারী এক বা একাধিক রোলের সদস্য হতে পারে, এবং সেই অনুযায়ী অ্যাপ্লিকেশনের নির্দিষ্ট অংশে তার অ্যাক্সেস নির্ধারণ করা হয়।
Authorize
অ্যাট্রিবিউট ব্যবহার করে নির্দিষ্ট রোলের জন্য অ্যাক্সেস অনুমোদন করা হয়।ধরা যাক, আপনি দুটি রোল Admin
এবং User
ডিফাইন করতে চান। এই রোলগুলো ব্যবহারকারীকে অ্যাপ্লিকেশনের বিভিন্ন অংশে অ্যাক্সেস দেয়।
[Authorize]
অ্যাট্রিবিউট ব্যবহার করে নির্দিষ্ট রোলের ব্যবহারকারীদের অ্যাক্সেস প্রদান করা হয়।
[Authorize(Roles = "Admin")]
public IActionResult AdminDashboard()
{
return View();
}
এখানে, কেবলমাত্র Admin
রোলের ব্যবহারকারীরা AdminDashboard
অ্যাকশন মেথডে অ্যাক্সেস পাবে। অন্যথায়, ব্যবহারকারীকে Unauthorized (401) অ্যাক্সেস রেসপন্স প্রদান করা হবে।
Claim-based Authorization আরও বিস্তারিত ও নমনীয় একটি পদ্ধতি, যেখানে claims ব্যবহারকারীর তথ্যের উপর ভিত্তি করে অ্যাক্সেস নির্ধারণ করা হয়। একটি claim হলো একটি বিবরণী বা একক টুকরো ডেটা (যেমন, নাম, ইমেইল, বয়স, অধিকার ইত্যাদি), যা ব্যবহারকারী সম্পর্কিত। Claim-based Authorization আপনাকে নির্দিষ্ট claim এর ভিত্তিতে অ্যাক্সেস কন্ট্রোল করতে সাহায্য করে।
ধরা যাক, আপনি একটি claim তৈরি করতে চান যেখানে ব্যবহারকারীর রোল বা অধিকার সম্পর্কে তথ্য থাকবে। উদাহরণস্বরূপ, আপনি একটি claim তৈরি করতে পারেন যা বলে "HasAdminRights"।
[Authorize(Policy = "HasAdminRights")]
public IActionResult AdminArea()
{
return View();
}
এখানে, Policy
দ্বারা আপনি নির্দিষ্ট claim ভিত্তিক অ্যাক্সেস নিয়ন্ত্রণ করতে পারেন। "HasAdminRights" নামের ক্লেইমটি ব্যবহারকারীর কাছে থাকা উচিত।
বৈশিষ্ট্য | Role-based Authorization | Claim-based Authorization |
---|---|---|
কিভাবে কাজ করে | ব্যবহারকারীর রোলের উপর ভিত্তি করে অ্যাক্সেস নিয়ন্ত্রণ। | ব্যবহারকারীর claims (যেমন, ইমেইল, অ্যাকাউন্ট টিপ, অধিকার) এর উপর ভিত্তি করে অ্যাক্সেস নিয়ন্ত্রণ। |
লচিলতা | কম নমনীয়তা, কেবল রোল ভিত্তিক অ্যাক্সেস নিয়ন্ত্রণ। | অধিক নমনীয়তা, claims এর উপর ভিত্তি করে আরও বিস্তারিত নিয়ন্ত্রণ। |
ব্যবহার | সাধারণত বড় এবং সাধারণ অ্যাপ্লিকেশনগুলোর জন্য যেখানে রোল ভিত্তিক অধিকার প্রয়োজন। | যেসব অ্যাপ্লিকেশনে ব্যবহারকারীর বিভিন্ন দিকের উপর ভিত্তি করে অ্যাক্সেস নিয়ন্ত্রণ করা প্রয়োজন। |
সুবিধা | সহজ এবং দ্রুত প্রয়োগযোগ্য। | অধিক কার্যকর এবং উন্নত কাস্টমাইজেশন সক্ষম। |
নিরাপত্তা | কম নিরাপত্তা, কারণ রোলের মধ্যে খুব কম ডেটা থাকে। | অধিক নিরাপত্তা, কারণ claims এ অনেক বিশদ তথ্য থাকতে পারে। |
ASP.Net Core এ Policy-based Authorization ব্যবহার করে, আপনি একটি নির্দিষ্ট authorization policy ডিফাইন করতে পারেন, যা একটি বা একাধিক claims এর উপর ভিত্তি করে কাজ করবে। এটি claim-based Authorization এর উন্নত একটি রূপ।
Startup.cs
ফাইলে একটি নতুন পলিসি তৈরি করা যায়:
public void ConfigureServices(IServiceCollection services)
{
services.AddAuthorization(options =>
{
options.AddPolicy("HasAdminRights", policy =>
policy.RequireClaim("Admin", "true"));
});
}
এখানে, একটি পলিসি তৈরি করা হয়েছে যা নিশ্চিত করে যে ব্যবহারকারীর Admin
নামক claim এর মান "true"
হতে হবে।
[Authorize(Policy = "HasAdminRights")]
public IActionResult AdminDashboard()
{
return View();
}
এখানে, পলিসি অনুসারে ব্যবহারকারীকে Admin ক্লেইম থাকতে হবে যাতে তারা AdminDashboard
অ্যাক্সেস করতে পারে।
এটি আপনার অ্যাপ্লিকেশনের নিরাপত্তা এবং ব্যবহারকারীদের অ্যাক্সেস নিয়ন্ত্রণের জন্য অত্যন্ত গুরুত্বপূর্ণ দুটি পদ্ধতি।
External Login বা Third-party Authentication হলো একটি সিস্টেম যেখানে ইউজাররা তাদের Google, Facebook, Twitter, অথবা অন্যান্য তৃতীয় পক্ষের অ্যাকাউন্ট ব্যবহার করে লগইন করতে পারে। এটি ব্যবহারকারীদের সাইন আপ এবং লগইন প্রক্রিয়াকে আরও দ্রুত এবং সহজ করে তোলে। ASP.Net Core এ, External Login এর ইন্টিগ্রেশন খুবই সহজ এবং এটি OAuth 2.0 বা OpenID Connect প্রোটোকল ব্যবহার করে তৃতীয় পক্ষের সেবা প্রদানকারীদের সাথে সংযুক্ত হয়।
এটি মূলত Identity সিস্টেমের অংশ হিসেবে কাজ করে, এবং ASP.Net Core Identity এর মাধ্যমে খুব সহজে গুগল, ফেসবুক, টুইটার ইত্যাদি পরিষেবার মাধ্যমে লগইন ইন্টিগ্রেট করা যায়।
এই প্রক্রিয়াটি কয়েকটি প্রধান ধাপ অনুসরণ করে সম্পন্ন হয়।
https://localhost:5001/signin-google
(আপনার অ্যাপ্লিকেশনের URL অনুযায়ী) দিন।Microsoft.AspNetCore.Authentication.Google
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddAuthentication()
.AddGoogle(options =>
{
options.ClientId = "your-client-id"; // আপনার Google Client ID
options.ClientSecret = "your-client-secret"; // আপনার Google Client Secret
});
services.AddControllersWithViews();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseAuthentication(); // Authentication Middleware ব্যবহার করতে হবে
app.UseAuthorization();
}
}
public class AccountController : Controller
{
public IActionResult Login(string returnUrl = null)
{
return Challenge(new AuthenticationProperties { RedirectUri = returnUrl ?? "/" }, "Google");
}
[HttpPost]
public async Task<IActionResult> Logout()
{
await HttpContext.SignOutAsync();
return RedirectToAction(nameof(HomeController.Index), "Home");
}
}
<a href="/Account/Login">Login with Google</a>
Microsoft.AspNetCore.Authentication.Facebook
public void ConfigureServices(IServiceCollection services)
{
services.AddAuthentication()
.AddFacebook(options =>
{
options.AppId = "your-app-id"; // আপনার Facebook App ID
options.AppSecret = "your-app-secret"; // আপনার Facebook App Secret
});
services.AddControllersWithViews();
}
Microsoft.AspNetCore.Authentication.Twitter
public void ConfigureServices(IServiceCollection services)
{
services.AddAuthentication()
.AddTwitter(options =>
{
options.ConsumerKey = "your-consumer-key"; // আপনার Twitter Consumer Key
options.ConsumerSecret = "your-consumer-secret"; // আপনার Twitter Consumer Secret
});
services.AddControllersWithViews();
}
/signin-google
, /signin-facebook
, /signin-twitter
)।ASP.Net Core এ External Login (যেমন Google, Facebook, Twitter) ইন্টিগ্রেশন একটি সহজ প্রক্রিয়া, যা ইউজারদের তৃতীয় পক্ষের অ্যাকাউন্ট দিয়ে অ্যাপ্লিকেশনে লগইন করার সুবিধা দেয়। আপনি OAuth 2.0 প্রোটোকল ব্যবহার করে বিভিন্ন সেবা প্রদানকারীদের সঙ্গে অ্যাপ্লিকেশন ইন্টিগ্রেট করতে পারবেন, যা ইউজারের জন্য আরও নিরাপদ এবং সহজ লগইন প্রক্রিয়া নিশ্চিত করে।
Token-based Authentication একটি আধুনিক নিরাপত্তা প্রক্রিয়া যা ব্যবহারকারীকে সার্ভারের সাথে নিরাপদভাবে যোগাযোগ করতে অনুমতি দেয়। JSON Web Token (JWT) হল একটি ওপেন স্ট্যান্ডার্ড যা দুটি পক্ষের মধ্যে নিরাপদ তথ্য বিনিময়ের জন্য ব্যবহৃত হয়। ASP.Net Core অ্যাপ্লিকেশনে JWT ব্যবহার করা হয় ব্যবহারকারীকে অথেন্টিকেট করার জন্য। এই পদ্ধতিতে, সার্ভার একটি টোকেন প্রদান করে, যা পরবর্তীতে ক্লায়েন্ট দ্বারা সাবমিট করা হয় এবং সার্ভার এই টোকেনের মাধ্যমে ব্যবহারকারীকে অথেন্টিকেট করে।
JWT একটি কমপ্যাক্ট এবং স্বনির্ভর স্ট্যান্ডার্ড যা তিনটি অংশে বিভক্ত:
Header.Payload.Signature
JWT Authentication ব্যবহার করতে Microsoft.AspNetCore.Authentication.JwtBearer প্যাকেজটি ইনস্টল করতে হবে।
dotnet add package Microsoft.AspNetCore.Authentication.JwtBearer
ASP.Net Core অ্যাপ্লিকেশনে JWT Authentication কনফিগার করতে আপনাকে Startup.cs ফাইলে কিছু সেটিংস করতে হবে।
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
// JWT Authentication কনফিগারেশন
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.RequireHttpsMetadata = false; // HTTPS বাধ্যতামূলক নয়
options.SaveToken = true; // টোকেন সেভ করা হবে
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidateAudience = true,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
ValidIssuer = "your-issuer",
ValidAudience = "your-audience",
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("your-secret-key"))
};
});
services.AddControllers();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseRouting();
// JWT Authentication Middleware ব্যবহার
app.UseAuthentication();
// Authorization Middleware ব্যবহার
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
}
এখানে:
অথেন্টিকেশন সফল হলে, আপনাকে JWT টোকেন তৈরি করতে হবে এবং তা ক্লায়েন্টকে পাঠাতে হবে। এটি করার জন্য একটি অ্যাকশন তৈরি করা হয় যা ক্রেডেনশিয়াল যাচাইয়ের পর একটি টোকেন রিটার্ন করবে।
public class AuthController : ControllerBase
{
private readonly IConfiguration _configuration;
public AuthController(IConfiguration configuration)
{
_configuration = configuration;
}
[HttpPost("login")]
public IActionResult Login([FromBody] LoginModel login)
{
if (login.Username == "admin" && login.Password == "password")
{
var claims = new[]
{
new Claim(JwtRegisteredClaimNames.Sub, login.Username),
new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString())
};
var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_configuration["Jwt:SecretKey"]));
var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
var token = new JwtSecurityToken(
issuer: _configuration["Jwt:Issuer"],
audience: _configuration["Jwt:Audience"],
claims: claims,
expires: DateTime.Now.AddHours(1),
signingCredentials: creds
);
return Ok(new
{
token = new JwtSecurityTokenHandler().WriteToken(token)
});
}
return Unauthorized();
}
}
এখানে:
প্রতিটি রিকোয়েস্টে, ক্লায়েন্ট JWT টোকেনটি Authorization Header এ পাঠায়।
GET /api/values
Authorization: Bearer <your-token-here>
ASP.Net Core এই টোকেনটি গ্রহণ করে এবং যাচাই করে, এবং যদি টোকেনটি বৈধ হয়, তবে রিকোয়েস্টটি প্রসেস করা হয়।
JWT Authentication আপনার অ্যাপ্লিকেশনকে আরও নিরাপদ এবং স্কেলেবল করে তোলে, কারণ এটি স্টেটলেস এবং সেশনের প্রয়োজন হয় না।
Read more